import Vue from 'vue'
import Router from 'vue-router'
import routes from './routers'
import ViewUI from 'view-design';
import { setTitle } from '@/libs/util';
import $app from '@$@/js/$app';
import $ajax from '../_$_project/js/$ajax';
import $store from '@/store';


// 解决路由跳转相同页面报错的问题 Uncaught (in promise) NavigationDuplicated
const originalPush = Router.prototype.push
Router.prototype.push = function push(location, onResolve, onReject) {
  if (onResolve || onReject) return originalPush.call(this, location, onResolve, onReject)
  return originalPush.call(this, location).catch(err => err)
}
const originalReplace = Router.prototype.replace
Router.prototype.replace = function replace(location, onResolve, onReject) {
  if (onResolve || onReject) return originalReplace.call(this, location, onResolve, onReject)
  return originalReplace.call(this, location).catch(err => err)
}





// 头部进度条控制显示隐藏
const loadingBarGo=buEr=>{
  if(buEr){
    ViewUI.LoadingBar.start();//显示进度条
  }else{
    ViewUI.LoadingBar.finish();//结束进度条
    window.scrollTo(0, 0)
    $store.commit('upData_contentWrapperShow',true);// 关闭页面的时候，工作区短暂隐藏，路由通过后，再显示
  }
}


Vue.use(Router)
const router = new Router({
  routes,
  // mode: 'history'  //默认值为 hash 地址栏带 #；history 地址栏不带 #
})

//总钩子函数
router.beforeEach((to, from, next) => {
  //console.log('from = ',from,'to = ',to)

  loadingBarGo(true);//显示进度条
  let{
    query:{
      globalUrl
    }
  }=to;
  

  //名 和 路径 都不是 登录页
  if(to.name!='login' && to.path!='/login' ){//非登录页 普通页面直接走流程

    //判断有没有登录，没有强制跳，登录页
    $app.getTokenFun(globalUrl,(token,nowTime)=>{
      //获取用户权限
      $app.routerRoot(to,()=>{
        if($app.judgeData(globalUrl)){
          next({
            replace:true,
            path:`/${globalUrl}`,
          });
        }else{
          next();
        }
      });
    });
  }else{//登录页 单独 做判断 

    let{
      query:{//地址栏取值
        api_token,
        bind_email
      }
    }=to;

    //绑定邮箱自动登录
    if($app.judgeData(api_token)){


      //清除所有缓存
      $app.loginOutClear(()=>{
        $app.saveToken(globalUrl,api_token,false,false);//true存local永久；false存local短期
        
        // 邮箱注册 把bind_email提交个后台
        if(from.path=='/' && $app.judgeData(bind_email)){
          console.log('验证邮箱，强制性更 企业信息 => 提交 bind_email = >')
          $ajax.bigSetting(()=>{
            $app.toast('邮箱修改成功',true);
            $ajax.pInfo();
          },{bind_email});
        }
        
      });
    }else{

      //以防变态用户的操作
      $app.getTokenFun(globalUrl,(token, nowTime)=>{//有token
        $app.toast('您已经登录过，无需再登录。',true);
        
        //应用 没有 运行的情况下
        //手动地址栏输入xxx/#/login
        if(from.path=='/'){//直接从零开始，地址栏输入logo地址。
          
          next({
            replace:true,
            name:'home',
          });

          loadingBarGo(false);//结束进度条
          console.log('强制性去 首页~~~')

        }else{//应用 运行的情况下，手动地址栏输入xxx/#/login, 这种情况触发不多
          
          next({
            replace:true,
            name:from.name,
          });

          loadingBarGo(false);//结束进度条
          console.log('不给你回去 登录页！')
        }
      },()=>{//没有token
        console.log('login=>继续')
        next();
      });
    }
  }

  
})

router.afterEach(to => {
  setTitle(to, router.app)
  loadingBarGo(false);//结束进度条
})

export default router;
